package Dominio;

import hbt.PersistentObject;

import javax.persistence.*;

import dto.MarcaTO;
import dto.PaisTO;
import dto.RodamientoTO;
import Enums.TipoRodamiento;

@Entity
@Table(name="rodamientos")
@NamedQueries({@NamedQuery(name="existeNs", query="select roda from Rodamiento roda where roda.numeroSerie=:ns" )
, @NamedQuery(name="mismoRodamiento", query="select r from Rodamiento r where r.numeroSerie=:ns and r.sufijo=:s and r.marca.nombre=:m and r.paisOrigen.nombre=:o")})

public class Rodamiento extends PersistentObject{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Column(name="tipoRodamiento")
	@Enumerated(EnumType.ORDINAL)
	private TipoRodamiento tipo;
	
	@Column(name="caracteristica")
	private String caracteristica;
	
	@Column(name="medida")
	private float medida;
	
	@OneToOne (cascade = CascadeType.ALL)
	@JoinColumn (name = "idPaisOrigen")
	private Pais  paisOrigen;
	
	@OneToOne (cascade = CascadeType.ALL)
	@JoinColumn (name = "idMarca")
	private Marca  marca;
	
	@Column (name = "codigo")
	private String codigo;
	
	@Column (name = "codigoSKF")
	private String codigoSKF;

	@Column(name="numeroSerie", nullable=false)
	private String numeroSerie ;
	
	@Column(name="sufijo", nullable=false)
	private String  sufijo;
		
	@Column(name="precio")
	private float precio;
	
	@Column(name="stock")
	private int stock;
	

	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getCodigoSKF() {
		return codigoSKF;
	}
	public void setCodigoSKF(String codigoSKF) {
		this.codigoSKF = codigoSKF;
	}
	public TipoRodamiento getTipo() {
		return tipo;
	}
	public void setTipo(TipoRodamiento tipo) {
		this.tipo = tipo;
	}
	
	public String getCaracteristica() {
		return caracteristica;
	}
	public void setCaracteristica(String caracteristica) {
		this.caracteristica = caracteristica;
	}
	
	public double getMedida() {
		return medida;
	}
	public void setMedida(float medida) {
		this.medida = medida;
	}
	
	public Pais getPaisOrigen() {
		return paisOrigen;
	}
	
	public void setPaisOrigen(Pais paisOrigen) {
		this.paisOrigen = paisOrigen;
	}
	
	public Marca getMarca() {
		return marca;
	}
	public void setMarca(Marca marca) {
		this.marca = marca;
	}
	
	public int getStock() {
		return stock;
	}
	public void setStock(int stock) {
		this.stock = stock;
	}

	public float getPrecio() {
		return precio;
	}
	public void setPrecio (float precio) {
		this.precio = precio;
	}
	
	public String getNumeroSerie() {
		return numeroSerie;
	}
	public void setNumeroSerie(String numeroSerie) {
		this.numeroSerie = numeroSerie;
	}
	public String getSufijo() {
		return sufijo;
	}
	public void setSufijo(String sufijo) {
		this.sufijo = sufijo;
	}

	
	@Override
	public String toString() {
		return "numeroSerie=" + numeroSerie + "\nsufijo=" + sufijo
				+ "\n marca=" + marca + "\norigen=" + this.paisOrigen.getNombre() + "\n precio="
				+ precio + "\nstock=" + stock + "\ncaracteristica="
				+ caracteristica;
	}
	public RodamientoTO toTO() {
		MarcaTO marcaTO = new MarcaTO();
		PaisTO paisTO = new PaisTO();
		
		
		marcaTO.setNombre(this.marca.getNombre());
		paisTO.setNombre(this.paisOrigen.getNombre());
		
		String tipoRod = "";
		if (this.tipo != null)
		{
			tipoRod = this.tipo.name();
		}
		
		RodamientoTO rodTO = new RodamientoTO(this.caracteristica, String.valueOf(this.id), this.codigoSKF, marcaTO, 
				this.medida, this.numeroSerie, paisTO, this.precio, this.stock, this.sufijo, tipoRod);
	
		
		return rodTO;
	}
	
	
	
	
	
	
}
